package com.itheima.mapper;


import com.itheima.pojo.User;
import org.apache.ibatis.annotations.*;

import java.util.List;


/*
@Mapper注解：表示是mybatis中的Mapper接口
程序运行时，框架会自动生成接口的实现类对象(代理对象)，并给交Spring的IOC容器管理
*/
@Mapper
public interface UserMapper {

    /*注意：一个接口方法对应的SQL语句，要么使用注解配置，要么使用XML配置，切不可同时配置。*/

    //@Select注解：代表的就是select查询，用于书写select查询语句
    //@Select("select id, username, password, name, age from user")
    public List<User> findAll();



    /**
     * 根据id删除
     */
    @Delete("delete from user where id=#{id}")
    public Integer deleteById(Integer id);

    /**
     * 添加用户
     */
    @Insert("insert into user(username, password, name, age) values (#{username},#{password},#{name},#{age}) ")
    public void intsert(User user);

    /**
     * 根据id更新用户信息
     */
    @Update("update user set username = #{username},password = #{password},name = #{name},age= #{age} where id = #{id}")
    public void update(User user);

    /**
     * 根据用户名和密码查询用户信息,如果是基于官方骨架创建的springboot项目中，接口编译时会保留方法形参名，@Param注解可以省略 (#{形参名})。
     */
//     @Param注解通常用于 MyBatis（一个流行的 Java 持久层框架）中，用于给 SQL 映射方法中的参数起别名，便于在 XML 映射文件中引用。
//     这是 MyBatis 中的一种常见用法，尤其在方法参数较多时，使用 @Param 可以明确标识参数的名称
    @Select("select * from user where username = #{username} and password = #{password}")
    public User findByUsernameAndPassword(@Param("username") String username, @Param("password") String password);

}
